{
    "cells": [
        {
            "cell_type": "markdown",
            "id": "307804a3-c02b-4a57-ac0d-172c30ddc851",
            "metadata": {},
            "source": [
                "# Weaviate Index Demo"
            ]
        },
        {
            "cell_type": "markdown",
            "id": "f7010b1d-d1bb-4f08-9309-a328bb4ea396",
            "metadata": {},
            "source": [
                "#### Creating a Weaviate Client"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": null,
            "id": "eccceb71",
            "metadata": {},
            "outputs": [],
            "source": [
                "import logging\n",
                "import sys\n",
                "\n",
                "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n",
                "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 1,
            "id": "72a4b618-668d-4713-84c5-6362030e9f19",
            "metadata": {},
            "outputs": [],
            "source": [
                "import weaviate"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 2,
            "id": "0c9f4d21-145a-401e-95ff-ccb259e8ef84",
            "metadata": {},
            "outputs": [],
            "source": [
                "resource_owner_config = weaviate.AuthClientPassword(\n",
                "  username = \"<username>\", \n",
                "  password = \"<password>\", \n",
                ")"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 3,
            "id": "df8b27e5-5ad5-4dfe-90c7-0cf1f1d1b37f",
            "metadata": {},
            "outputs": [],
            "source": [
                "client = weaviate.Client(\"https://<cluster-id>.semi.network/\", auth_client_secret=resource_owner_config)"
            ]
        },
        {
            "cell_type": "markdown",
            "id": "8ee4473a-094f-4d0a-a825-e1213db07240",
            "metadata": {},
            "source": [
                "#### Load documents, build the GPTWeaviateIndex"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": null,
            "id": "0a2bcc07",
            "metadata": {},
            "outputs": [],
            "source": [
                "from gpt_index import GPTWeaviateIndex, SimpleDirectoryReader\n",
                "from IPython.display import Markdown, display"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 6,
            "id": "68cbd239-880e-41a3-98d8-dbb3fab55431",
            "metadata": {},
            "outputs": [],
            "source": [
                "# load documents\n",
                "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": null,
            "id": "ba1558b3",
            "metadata": {},
            "outputs": [],
            "source": [
                "index = GPTWeaviateIndex.from_documents(documents, weaviate_client=client)\n",
                "\n",
                "# NOTE: you may also choose to define a class_prefix manually.\n",
                "# class_prefix = \"test_prefix\"\n",
                "# index = GPTWeaviateIndex.from_documents(documents, weaviate_client=client, class_prefix=class_prefix)"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 10,
            "id": "c36cadc1",
            "metadata": {},
            "outputs": [],
            "source": [
                "# save index to disk\n",
                "index.save_to_disk('index_weaviate.json')"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 11,
            "id": "70b372a7",
            "metadata": {},
            "outputs": [],
            "source": [
                "# load index from disk\n",
                "index = GPTWeaviateIndex.load_from_disk('index_weaviate.json', weaviate_client=client)"
            ]
        },
        {
            "cell_type": "markdown",
            "id": "04304299-fc3e-40a0-8600-f50c3292767e",
            "metadata": {},
            "source": [
                "#### Query Index"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": null,
            "id": "35369eda",
            "metadata": {},
            "outputs": [],
            "source": [
                "# set Logging to DEBUG for more detailed outputs\n",
                "response = index.query(\"What did the author do growing up?\")"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 13,
            "id": "bedbb693-725f-478f-be26-fa7180ea38b2",
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/markdown": [
                            "<b>\n",
                            "The author grew up writing short stories, programming on an IBM 1401, and working on microcomputers. He wrote simple games, a program to predict how high his model rockets would fly, and a word processor. He studied philosophy in college, but switched to AI. He reverse-engineered SHRDLU for his undergraduate thesis and wrote a book about Lisp hacking. He visited the Carnegie Institute and realized he could make art that would last. He took art classes at Harvard and applied to RISD and the Accademia di Belli Arti in Florence.</b>"
                        ],
                        "text/plain": [
                            "<IPython.core.display.Markdown object>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "display(Markdown(f\"<b>{response}</b>\"))"
            ]
        }
    ],
    "metadata": {
        "kernelspec": {
            "display_name": "Python 3 (ipykernel)",
            "language": "python",
            "name": "python3"
        },
        "language_info": {
            "codemirror_mode": {
                "name": "ipython",
                "version": 3
            },
            "file_extension": ".py",
            "mimetype": "text/x-python",
            "name": "python",
            "nbconvert_exporter": "python",
            "pygments_lexer": "ipython3",
            "version": "3.10.10"
        }
    },
    "nbformat": 4,
    "nbformat_minor": 5
}
